home *** CD-ROM | disk | FTP | other *** search
/ Game Gateway (USA) / Game Gateway (USA).bin / BackWeb / data.z / native.h < prev    next >
C/C++ Source or Header  |  1997-05-04  |  12KB  |  334 lines

  1.  
  2. // (C) Copyright 1996, Microsoft Corporation and it suppliers.
  3.  
  4. //----------------------------------------------------------------------------
  5. // Public header for facilities provided by MSJava.dll
  6. //----------------------------------------------------------------------------
  7.  
  8. #ifndef _NATIVE_
  9. #define _NATIVE_
  10.  
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14.  
  15. //----------------------------------------------------------------------------
  16. // Since handles have gone away, this is no op. The unhands() in this file
  17. // a redundant but useful for clarity.
  18. // Note: You can not just unhand an array to get at it's data, you must now 
  19. // use unhand(x)->body.
  20. //----------------------------------------------------------------------------
  21. #define unhand(phobj) (phobj)
  22.  
  23. //----------------------------------------------------------------------------
  24. //----------------------------------------------------------------------------
  25. #define JAVAPKG    "java/lang/"
  26.  
  27. //----------------------------------------------------------------------------
  28. // Standard Java declarations for built in types.
  29. //----------------------------------------------------------------------------
  30. typedef long OBJECT;
  31. typedef OBJECT Classjava_lang_Object;
  32. typedef OBJECT Hjava_lang_Object;
  33. typedef OBJECT ClassObject;
  34. typedef Hjava_lang_Object JHandle;
  35. typedef Hjava_lang_Object HObject;
  36.  
  37. typedef unsigned short unicode;
  38. typedef long int32_t;
  39. typedef __int64 int64_t;
  40. typedef int BOOL;
  41. typedef void *PVOID;    
  42. typedef unsigned long DWORD;
  43. #ifndef _SIZE_T_DEFINED
  44. #define _SIZE_T_DEFINED
  45. typedef unsigned int size_t;
  46. #endif
  47. #ifndef VOID
  48. #define VOID void
  49. #endif
  50. #ifndef _BOOL_T_DEFINED
  51. #define _BOOL_T_DEFINED
  52. typedef BOOL bool_t;
  53. #endif
  54.  
  55. //----------------------------------------------------------------------------
  56. // Use to get the length of an array an HObject.
  57. //----------------------------------------------------------------------------
  58. #define obj_length(hobj) (((ArrayOfSomething*)unhand(hobj))->length)
  59.  
  60. //----------------------------------------------------------------------------
  61. // Garbage Collection.
  62. //----------------------------------------------------------------------------
  63. typedef struct {
  64.     DWORD    reserved[6];
  65. } GCFrame;
  66.  
  67. void    __cdecl GCFramePush(PVOID pGCFrame, PVOID pObjects, 
  68.                 DWORD cbObjectStructSize);
  69. void    __cdecl GCFramePop(PVOID pGCFrame);
  70.  
  71. HObject** __cdecl GCGetPtr(HObject *phobj);
  72. void    __cdecl GCFreePtr(HObject **pphobj);
  73.  
  74. #define GCGetWeakPtr    GCGetPtr
  75. #define GCFreeWeakPtr   GCFreePtr
  76.  
  77. int     __cdecl GCEnable();
  78. int     __cdecl GCDisable();
  79. int     __cdecl GCDisableCount();
  80. int     __cdecl GCEnableCompletely();
  81. void    __cdecl GCDisableMultiple(int cDisable);
  82.  
  83. //----------------------------------------------------------------------------
  84. // "Built-in" object structures...
  85. // These include helper macro's to get at array data.
  86. //----------------------------------------------------------------------------
  87.  
  88. #pragma pack(push,1)
  89. typedef struct Classjava_lang_String {
  90.     int32_t MSReserved;
  91.     struct ClassArrayOfChar *value;
  92.     long offset;
  93.     long count;
  94. } Classjava_lang_String;
  95. #define Hjava_lang_String Classjava_lang_String
  96. typedef Hjava_lang_String HString;
  97.  
  98. typedef struct ClassArrayOfByte
  99. {
  100.     int32_t MSReserved;
  101.     unsigned long length;
  102.     char body[1];
  103. } ClassArrayOfByte;
  104. #define HArrayOfByte ClassArrayOfByte
  105. #define ArrayOfByte ClassArrayOfByte
  106.  
  107. typedef struct ClassArrayOfChar
  108. {
  109.     int32_t MSReserved;
  110.     unsigned long length;
  111.     unsigned short body[1];
  112. } ClassArrayOfChar;
  113. #define HArrayOfChar ClassArrayOfChar
  114. #define ArrayOfChar ClassArrayOfChar
  115.  
  116. typedef struct ClassArrayOfShort
  117. {
  118.     int32_t MSReserved;
  119.     unsigned long length;
  120.     short body[1];
  121. } ClassArrayOfShort;
  122. #define HArrayOfShort ClassArrayOfShort
  123. #define ArrayOfShort ClassArrayOfShort
  124.  
  125. typedef struct ClassArrayOfInt
  126. {
  127.     int32_t MSReserved;
  128.     unsigned long length;
  129.     long body[1];
  130. } ClassArrayOfInt;
  131. #define HArrayOfInt ClassArrayOfInt
  132. #define ArrayOfInt ClassArrayOfInt
  133.  
  134. typedef struct ClassArrayOfLong
  135. {
  136.     int32_t MSReserved;
  137.     unsigned long length;
  138.     __int64 body[1];
  139. } ClassArrayOfLong;
  140. #define HArrayOfLong ClassArrayOfLong
  141. #define ArrayOfLong ClassArrayOfLong
  142.  
  143. typedef struct ClassArrayOfFloat
  144. {
  145.     int32_t MSReserved;
  146.     unsigned long length;
  147.     float body[1];
  148. } ClassArrayOfFloat;
  149. #define HArrayOfFloat ClassArrayOfFloat
  150. #define ArrayOfFloat ClassArrayOfFloat
  151.  
  152. typedef struct ClassArrayOfDouble
  153. {
  154.     int32_t MSReserved;
  155.     unsigned long length;
  156.     double body[1];
  157. } ClassArrayOfDouble;
  158. #define HArrayOfDouble ClassArrayOfDouble
  159. #define ArrayOfDouble ClassArrayOfDouble
  160.  
  161. typedef struct ClassArrayOfObject
  162. {
  163.     int32_t MSReserved;
  164.     unsigned long length;
  165.     HObject *body[1];
  166. } ClassArrayOfObject;
  167. #define HArrayOfObject ClassArrayOfObject
  168. #define ArrayOfObject ClassArrayOfObject
  169.  
  170. typedef struct ClassArrayOfString
  171. {
  172.     int32_t MSReserved;
  173.     unsigned long length;
  174.     HString  *(body[1]);
  175. } ClassArrayOfString;
  176. #define HArrayOfString ClassArrayOfString
  177. #define ArrayOfString ClassArrayOfString
  178.  
  179. typedef struct ClassArrayOfArray
  180. {
  181.     int32_t MSReserved;
  182.     unsigned long length;
  183.     JHandle *(body[1]);
  184. } ClassArrayOfArray;
  185. #define HArrayOfArray ClassArrayOfArray
  186. #define ArrayOfArray ClassArrayOfArray
  187.  
  188. typedef struct
  189. {
  190.     int32_t MSReserved;
  191.     unsigned long length;
  192. } ArrayOfSomething;
  193. #pragma pack(pop)
  194.  
  195. //----------------------------------------------------------------------------
  196. // We automatically track the execution environment so there's no EE() call
  197. // needed anymore, just pass NULL if an API needs one.
  198. //----------------------------------------------------------------------------
  199. #define EE() NULL
  200. typedef void ExecEnv;
  201.  
  202. //----------------------------------------------------------------------------
  203. // Exception handling stuff...
  204. //----------------------------------------------------------------------------
  205. void __cdecl SignalError(struct execenv *ee, char *ename, char *DetailMessage);
  206. bool_t __cdecl exceptionOccurred(ExecEnv *ee);
  207. void __cdecl exceptionDescribe(ExecEnv *ee);
  208. void __cdecl exceptionClear(ExecEnv *ee);
  209.  
  210. void __cdecl SignalErrorPrintf( char *ename, char *pszFormat, ...);
  211.  
  212. //----------------------------------------------------------------------------
  213. // Standard exec functions...
  214. //----------------------------------------------------------------------------
  215. typedef PVOID ClassClass;
  216.  
  217. HObject* __cdecl execute_java_constructor(ExecEnv *ee, char *classname, 
  218.         ClassClass *cb, char *signature, ...);
  219.         
  220. long __cdecl execute_java_dynamic_method(ExecEnv *ee, HObject *obj, char 
  221.         *method_name, char *signature, ...);
  222.  
  223.         
  224. //----------------------------------------------------------------------------
  225. // NB The resolve flag is ignored, classes found with this api will always
  226. // be resolved.
  227. //----------------------------------------------------------------------------
  228. ClassClass* __cdecl FindClass(ExecEnv *ee, char *classname, bool_t resolve);
  229.  
  230. long __cdecl execute_java_static_method(ExecEnv *ee, ClassClass *cb, 
  231.         char *method_name, char *signature, ...);
  232.  
  233. //----------------------------------------------------------------------------
  234. // Helper function that returns a methodblock.
  235. //----------------------------------------------------------------------------
  236. struct methodblock* __cdecl get_methodblock(HObject *pjobj, char *method_name, 
  237.         char *signature);
  238.  
  239. //----------------------------------------------------------------------------
  240. // If you pass in a methodblock from get_methodblock the method name and
  241. // sig are ignored and so it's faster than a regular execute.
  242. //----------------------------------------------------------------------------
  243. long __cdecl do_execute_java_method(ExecEnv *ee, void *obj, char *method_name, 
  244.         char *signature, struct methodblock *mb, bool_t isStaticCall, ...);
  245.  
  246. //----------------------------------------------------------------------------
  247. //----------------------------------------------------------------------------
  248. BOOL __cdecl isInstanceOf(JHandle *phobj, char *classname);
  249.  
  250. //----------------------------------------------------------------------------
  251. #define T_TMASK    034
  252. #define T_LMASK 003
  253. #define T_MKTYPE( t, l )  ( ( (t)&T_TMASK ) | ( (l)&T_LMASK) )
  254.  
  255. #define T_CLASS        2
  256. #define T_FLOATING    4    
  257. #define T_CHAR        5
  258. #define T_INTEGER    010
  259. #define T_BOOLEAN    4
  260.  
  261. #define T_FLOAT     T_MKTYPE(T_FLOATING,2)
  262. #define T_DOUBLE    T_MKTYPE(T_FLOATING,3)
  263. #define T_BYTE        T_MKTYPE(T_INTEGER,0)
  264. #define T_SHORT        T_MKTYPE(T_INTEGER,1)
  265. #define T_INT        T_MKTYPE(T_INTEGER,2)
  266. #define T_LONG        T_MKTYPE(T_INTEGER,3)
  267.  
  268. //----------------------------------------------------------------------------
  269. // Create an array of primitive types only (int, long etc).
  270. //----------------------------------------------------------------------------
  271. HObject* __cdecl ArrayAlloc(int type, int cItems);
  272.  
  273. //----------------------------------------------------------------------------
  274. // Create an array of objects.
  275. //----------------------------------------------------------------------------
  276. HObject* __cdecl ClassArrayAlloc(int type, int cItems, char *szSig);
  277.  
  278. //----------------------------------------------------------------------------
  279. // Copy an array ala System.arrayCopy()
  280. //----------------------------------------------------------------------------
  281. void __cdecl ArrayCopy(HObject *srch, long src_pos, HObject *dsth, 
  282.         long dst_pos, long length);
  283.  
  284. //----------------------------------------------------------------------------
  285. // Create and return a new array of bytes initialized from the C string.
  286. //----------------------------------------------------------------------------
  287. HArrayOfByte* __cdecl MakeByteString(char *str, long len);
  288.  
  289. //----------------------------------------------------------------------------
  290. // Create and return a new Java String object, initialized from the C string.
  291. //----------------------------------------------------------------------------
  292. Hjava_lang_String* __cdecl makeJavaString(char *str, int len);
  293.  
  294. //----------------------------------------------------------------------------
  295. // Get the characters of the String object into a C string buffer.
  296. // No allocation occurs. Assumes that len is the size of the buffer.
  297. // The C string's address is returned.
  298. //----------------------------------------------------------------------------
  299. char* __cdecl javaString2CString(Hjava_lang_String *s, char *buf, int buflen);
  300.  
  301. //----------------------------------------------------------------------------
  302. // Return the length of the String object.
  303. //----------------------------------------------------------------------------
  304. int __cdecl javaStringLength(Hjava_lang_String *s);
  305.  
  306. //----------------------------------------------------------------------------
  307. // Note: The int passed to these API's must be an object ptr.
  308. //----------------------------------------------------------------------------
  309. #define obj_monitor(handlep) ((int) handlep)
  310. void __cdecl monitorEnter(unsigned int);
  311. void __cdecl monitorExit(unsigned int);
  312. void __cdecl monitorNotify(unsigned int);
  313. void __cdecl monitorNotifyAll(unsigned int);
  314.  
  315. #define ObjectMonitorEnter(obj)         monitorEnter((int)obj)
  316. #define ObjectMonitorExit(obj)          monitorExit((int)obj)
  317. #define ObjectMonitorNotify(obj)        monitorNotify((int)obj)
  318. #define ObjectMonitorNotifyAll(obj)     monitorNotifyAll((int)obj)
  319.  
  320. //----------------------------------------------------------------------------
  321. // String helpers...
  322. //----------------------------------------------------------------------------
  323. int __cdecl jio_snprintf(char *str, size_t count, const char *fmt, ...);
  324. int __cdecl jio_vsnprintf(char *str, size_t count, const char *fmt, va_list 
  325.         args);
  326.  
  327.  
  328.  
  329. #ifdef __cplusplus
  330. }
  331. #endif
  332.  
  333. #endif
  334.